package com.winning.platwebservice.utils;

import org.apache.commons.lang.StringUtils;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * 日期时间工具类
 */
public class DateUtil {

    /**
     * 通用日期格式正则
     */
    private static final String DATE_REGEX = "^[0-9]{4}(/|-)(((0[13578]|(10|12))(/|-)(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)(/|-)(0[1-9]|[1-2][0-9]|30)))($|\\s([0-1]\\d|[2][0-3])\\:[0-5]\\d\\:[0-5]\\d)(\\.([0-9])*)?";
    /**
     * yyyy-MM-dd HH:mm-ss.SSS日期格式正则
     */
    private static final String DATE_REGEX_1 = "^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))($|\\s([0-1]\\d|[2][0-3])\\:[0-5]\\d\\:[0-5]\\d)(\\.([0-9])*)?";

    /**
     * yyyy/MM/dd HH:mm-ss.SSS日期格式正则
     */
    private static final String DATE_REGEX_2 = "^[0-9]{4}/(((0[13578]|(10|12))/(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)/(0[1-9]|[1-2][0-9]|30)))($|\\s([0-1]\\d|[2][0-3])\\:[0-5]\\d\\:[0-5]\\d)(\\.([0-9])*)?";

    /**
     * yyyy-MM-dd HH:mm-ss格式
     */
    private static final String FORMAT_STRING_1_LONG = "yyyy-MM-dd HH:mm:ss";
    /**
     * yyyy-MM-dd格式
     */
    private static final String FORMAT_STRING_1_SHORT = "yyyy-MM-dd";

    /**
     * yyyy/MM/dd HH:mm-ss格式
     */
    private static final String FORMAT_STRING_2_LONG = "yyyy/MM/dd HH:mm:ss";


    /**
     * yyyy/MM/dd格式
     */
    private static final String FORMAT_STRING_2_SHORT = "yyyy/MM/dd";


    /**
     * 检查字符串是否符合日期格式
     *
     * @param
     * @return
     */
    public static boolean isValidDate(String s) {
        if (StringUtils.isBlank(s)) {
            return false;
        }
        return s.matches(DATE_REGEX);
    }

    /**
     * 将字符串转换成数据库日期
     *
     * @param
     * @return
     */
    public static Timestamp stringFormatDate(String sd) {
        Timestamp date = null;
        if (sd.matches(DATE_REGEX_1)) {
            try {
                date = new Timestamp(dateFormat(FORMAT_STRING_1_LONG, sd).getTime());
            } catch (ParseException e) {
                try {
                    date = new Timestamp(dateFormat(FORMAT_STRING_1_SHORT, sd).getTime());
                } catch (ParseException e1) {
                    e1.printStackTrace();
                }
            }
        } else if (sd.matches(DATE_REGEX_2)) {
            try {
                date = new Timestamp(dateFormat(FORMAT_STRING_2_LONG, sd).getTime());
            } catch (ParseException e) {
                try {
                    date = new Timestamp(dateFormat(FORMAT_STRING_2_SHORT, sd).getTime());
                } catch (ParseException e1) {
                    e1.printStackTrace();
                }
            }
        }
        return date;
    }


    /**
     * 根据指定格式将字符串转换成日期
     *
     * @param format 格式字符串
     * @param sd     日期格式字符串
     * @return java.util.Date
     * @author z_dd@winning.com.cn
     * @date 2019/6/3 16:09
     */
    public static Date dateFormat(String format, String sd) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        return simpleDateFormat.parse(sd);
    }
}
